#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <iostream>
// 不定参宏函数
#define Log(fmt, ...) printf("[%s:%d]" fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__)
void myprintf()
{
    Log("%s-%d", "hello", 111);
}
// C语言不定参
void myprintf1(const char *fmt, ...)
{
    va_list ap;
    va_start(ap, fmt); // ap指针指向fmt后面第一个参数的首地址
    char *ret;

    if (vasprintf(&ret, fmt, ap) != -1)
    {
        printf("%s\n", ret);
        free(ret);
    }
    va_end(ap); // 置空ap指针
}
// c++可变参数
void xprintf()
{
    std::cout << std::endl;
}
template <class T, class... Args>
void xprintf(const T &val, Args &&...args)
{
    std::cout << val;
    if ((sizeof...(args)) > 0)
    {
        xprintf(std::forward<Args>(args)...);
    }
    else
        xprintf();
}
int main()
{
    // myprintf();
    // myprintf1("[%s:%d]", "nihao", 18);
    xprintf(1, 2, 3, 4, 5);
    return 0;
}